package com.etone.smartAudit.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.etone.smartAudit.domain.Admin;
import com.etone.smartAudit.domain.work.WorkOrder;
import com.etone.smartAudit.vo.workOrder.WorkCountReportVO;
import com.etone.smartAudit.vo.workOrder.WorkOrderPendVO;
import com.etone.smartAudit.vo.workOrder.WorkOrderRectifyVO;
import com.etone.smartAudit.vo.workOrder.WorkOrderVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author 张任豪
 */
@Mapper
public interface WorkOrderMapper extends BaseMapper<WorkOrder> {

    /**
     * 工单查询列表
     * @param name 项目名称
     * @param rectifyCode 整改编码
     * @param startDate  开始时间
     * @param endDate    结束时间
     * @param status     工单状态
     * @param isOverdue  是否超期
     * @param wordOrderName 工单接收人
     * @param keyword    关键字
     * @param adminId
     * @return
     */
    List<WorkOrderVO> listWorkOrder(@Param("name") String name, @Param("rectifyCode") String rectifyCode, @Param("startDate") Date startDate, @Param("endDate") Date endDate,
                                    @Param("status") Integer status, @Param("isOverdue") Integer isOverdue, @Param("wordOrderName") String wordOrderName,
                                    @Param("keyword") String keyword,@Param("roleId") Integer roleId,
                                    @Param("adminId") Integer adminId, @Param("company") String company);

    /**
     * 批量插入工单
     * @param cachedDataList 工单集合
     * @return 插入数据
     */
    int saveAll(@Param("cachedDataList") List<WorkOrder> cachedDataList);


    /**
     * 修改派发工单状态
     * @param id 审核人ID
     * @param nickName 真实姓名
     * @param workId 工单ID
     * @param stepStatus 流程步骤
     */
    void updateState(@Param("id") Integer id, @Param("nickName") String nickName,
                     @Param("workId") Integer workId,@Param("stepStatus") Integer stepStatus);

    /**
     * 待处理工单
     * @param name 项目名称
     * @param rectifyCode 整改编码
     * @param startDate 开始时间
     * @param endDate 结束时间
     * @param isOverdue 是否已过期
     * @param admin 当前登录用户
     * @param workState 工单状态
     * @return
     */
    List<WorkOrderPendVO> listPend(@Param("name") String name, @Param("rectifyCode") String rectifyCode,
                                   @Param("startDate") Date startDate, @Param("endDate") Date endDate,
                                   @Param("isOverdue") Integer isOverdue, @Param("admin") Admin admin,
                                   @Param("workState") Integer workState, @Param("status") Integer status);

    /**
     * 风险整改
     * @param name 项目名称
     * @param auditUnit 审计单位
     * @param year 年份
     * @param startDate 整改开始时间
     * @param endDate  整改结束时间
     * @param status 状态
     * @param isOverdue 是否已过期
     * @param keyword 关键字
     * @param auditStart 开始审计金额
     * @param auditEnd 结束审计金额
     * @param rectifyResult 整改结果
     * @param departmentID 部门id
     * @param role 是否是管理员
     * @return
     */
    List<WorkOrderRectifyVO> listWorkOrderRectify(@Param("name") String name, @Param("auditUnit") String auditUnit,
                                                  @Param("year") String year, @Param("startDate") Date startDate,
                                                  @Param("endDate") Date endDate, @Param("status") Integer status,
                                                  @Param("isOverdue") Integer isOverdue, @Param("keyword") String keyword,
                                                  @Param("auditStart") Integer auditStart, @Param("auditEnd") Integer auditEnd,
                                                  @Param("rectifyResult") Integer rectifyResult, @Param("departmentID") String departmentID,
                                                  @Param("role") Integer role);

    /**
     * 风险统计
     * @return
     */
    HashMap<String,Object> countRectifyRate();

    /**
     * 城市统计报表
     * @param year
     * @param cityName
     * @return
     */
    Map<String, Object> countReport(@Param("year") Integer year,@Param("cityName") String cityName,
                                    @Param("departmentID")String departmentID,@Param("itemName") String itemName);

    Integer inTimeRate(@Param("year")Integer year, @Param("cityName")String cityName,
                       @Param("departmentID")String departmentID,@Param("itemName")String itemName);

    List<WorkCountReportVO> countCity(@Param("year") Integer year, @Param("city") String city);

    List<WorkCountReportVO> countProvince(@Param("department") String department);

    List<WorkCountReportVO> countProject(@Param("year")Integer year,@Param("itemName") String itemName);
}